Возврат заметок домой на Obsidian и git

41c8e7f23c59f3bf29baea972de132be.png

Сегодня в нашем кружке «оч.умелые клавиатурки» возврат блудных заметок домой. Долго пользовался платным Evernote, но оплатить его все труднее и дороже. Вернее даже так, сейчас я знаю всего один способ оплатить подписку через Билайн / МТС и Apple. Притом без оплаты подписки Evernote ужасен и порезан самым неприятным образом. Конечно есть ещё Notion, но кто знает как и когда он окуклиться как это случилось со временем с Evernote.

В качестве новой основы заметок я выбрал https://obsidian.md/. Opensource, море документации, толпа плагинов, готовые сборки подо все используемые мной платформы, в общем, все как мы любим. Я верю что вы умеете ставить докер и не стал это добавлять отдельным пунктом и немного понимаете ansible сценарии, потому что пару ролей будет именно на нем

Синхронизация

В результате долгих раздумий в качестве синхронизации был выбран git. Реализуется такая синхронизация с помощью плагина https://github.com/denolehov/obsidian-git. Он имеет некоторые особенности:

  1. Не умеет работать с ключами и ssh, удалось завести только с https и паролем

  2. Так как это плагин, а плагины в obsidian хранятся в директории с заметками, то при первом использовании возникает проблема курица и яйца, впрочем легко решаемая, расскажу об этом далее.

  3. Файл .obsidian/workspace.json часто вызывает конфликты при pull/push, поэтому его надо сразу добавить в .gitignore как описано в https://github.com/denolehov/obsidian-git/wiki/Tips-and-Tricks#gitignore

GIT + HTTPS

Так как мы в нашем кружке бежим из облаков и становимся хозяевами своих данных, то git https мы тоже будем держать свой. Описанный ниже сетап отлично живёт на Raspberry PI 4, которая торчит в DMZ дома и открыта по 443 порту через DNAT. Немного схем сетапа есть в статье https://habr.com/ru/articles/699374/. GIT живёт там же где и nextcloud. В качестве https могу сильно порекомендовать https://caddyserver.com/. C минимальной конфигурацией он будет сам делать let’s encrypt сертификаты и реверсно проксировать наш git, о котором ниже. В нашем кружке мы немного девопсеры и поэтому описание деплоя будет на Ansuble. Для простоты не будут приведены рестартующие хендлеры и прочая очевидная шняга. Caddy можно деплоить примерно такой ansible ролью:

tasks/main.yaml и files/Caddyfile

- name: Create /etc/caddy
  file:
    path: "{{ item }}"
    state: directory
    mode: 0755
  loop:
    - /etc/caddy
    - /etc/caddy/sites/
- name: Create caddy docker volumes
  docker_volume:
    name:
  loop:
    - caddy_config
    - caddy_data
- name: Start caddy
  docker_container:
    name: caddy
    image: caddy:latest
    network_mode: host
    restart_policy: always
    state: started
    volumes:
      - /etc/caddy:/etc/caddy
      - caddy_config:/config
      - caddy_data:/data
- name: Copy Caddyfile
  copy:
    src: Caddyfile
    dest: /etc/caddy/Caddyfile
    mode: 0644
  notify:
    - Restart caddy
{
  email my@email.ru
}

import /etc/caddy/sites/*.caddy

На что надо обратить внимание

  1. Volume caddy_config и caddy_data обязательно нужны, иначе при каждом рестарте caddy будет забывать что ssl сертификат запрошен и получен, он будет делать это снова и вас быстренько забанят на https://letsencrypt.org

  2. email в file/Caddyfile тоже обязателен и может быть любой, это тоже для https://letsencrypt.org

После прогона роли у нас все готово для git. В качестве git рекомендую gerrit. Ахаха, испугались ? Шучу. https://gogs.io/. Эдакий гитхаб на минималках. Не скажу чем он лучше или хуже gitea.com, выглядит легковеснее и отлично работает на rasberry pi 4. Роль для него на Ansible выглядит примерно так:

tasks/main.yaml и files/Caddyfile

############## Caddy
- name: Caddy
  include_role:
    name: caddy
- name: Copy Caddyfile
  copy:
    src: caddy/Caddyfile
    dest: /etc/caddy/sites/git.caddy
    mode: '0644'
  notify:
    - Restart caddy
- name: Create /var/gogs/
  file:
    path: /var/gogs
    state: directory
    mode: '0755'
- name: Start Gogs
  docker_container:
    name: gogs
    image: gogs/gogs:latest
    state: started
    restart_policy: always
    volumes:
      - /var/gogs:/data
    ports:
      - "18743:22"
      - "3003:3000"
    env:
      RUN_CROND: "true"
      BACKUP_INTERVAL: "1d"
      BACKUP_RETENTION: "6M"
git.example.com {
    reverse_proxy 127.0.0.1:3003
}

Собственно только после прогона этой роли https на caddy и заработает, потому что caddy поймет что сертификат надо будет делать для сайта git.example.com

Начало работы

Рекомендую начинать работать на лаптопе или десктопе

  1. создаем новый каталог

  2. вручную создаем в нем .git через git init

  3. создаем .gitignore, как описано в https://github.com/denolehov/obsidian-git/wiki/Tips-and-Tricks#gitignore

  4. Добавляем его и коммитим в git репу

  5. Открываем в Obisidian каталог как vault, ставим git плагин, настраиваем бекап через git

Добавление новых устройств

Ввиду проблемы курицы и яйца при использовании Obsidian на новом рекомендую утащить каталог целиком с уже настроенного девайса и открыть его на новом девайсе как vault.

Бекапы

Ввиду того что это git в версионности бекапов особого смысла нет. На самом деле при большом количестве девайсов и в бекапах особо нет смысла. У меня, например, Obsidian живёт на iPad, MacOS, Android и Linux. То есть на 6 девайсах есть своя копия разной степени синканутости. Так что потеря сервера не выглядит чем-то критичным в свете потери данных. Но вполне можно запилить на сервере и бекап, ничего сложного.

Шаринг

Для шаринга отдельных заметок можно использовать, например, плагин https://github.com/EasyChris/obsidian-to-notion. Нужно будет создать аккаунт в notion, получить api key и database id. Все описано в документации плагина, правда лично мне по началу не очень понятно, пришлось поморщить мозг. Но оно точно работает, клянусь соседским порoсенком. Возможно есть ещё плагины, но мне зашёл именно этот.

© Habrahabr.ru